import type { VNodeChild } from 'vue';

/** 菜单项配置 */
export type GlobalMenuOption = {
    key: string;
    label: string;
    authRouteButton?: string;
    routeName: string;
    routePath: string;
    icon?: () => VNodeChild;
    children?: GlobalMenuOption[];
};

/**
 *  筛选条件表单项
 *
 *  - input     输入框
 *  - select    筛选框
 *  - datePick  日期范围选择器
 *
 */
type FromType = 'input' | 'select' | 'datePick';

/** - 表格筛选条件From
 *
 *  - type - 表单类型
 *  - label - 显示表单元素名称
 *  - modeVal - 双向绑定表单元素值
 *  - width - 表单元素宽度
 *  - placeholder - 表单元素提示语
 *  - optison-? - 当表单元素类型为select时显示
 *
 */
export type HeaderFromOption = {
    type: FromType;
    label: string;
    modeVal: string | number;
    width: string;
    placeholder: string;
    options?: any[];
}[];

/**
 *  - 操作按钮选项（各属性遵守Element Button属性）
 *
 */
export type EventOption = {
    label?: string;
    types?: any;
    icon?: string;
    href?: string;
    openTarget?: boolean;
    onClick?: string;
};
export type EventOptionExtends<T> = T extends [] ? EventOption[] : EventOption;
/**
 *  - 表格数据选项
 *  - width - 表格宽度
 *  - prop  - 表格所填充的数据字段
 *  - label - 表头显示名称
 *  - slotName - 插槽名称
 *  - operation - 操作列选项
 */
export type DataType = {
    width?: string;
    prop?: string;
    label?: string;
    slotName?: string;
    operation?: EventOptionExtends<[]>;
}[];
